package Thread;

import java.util.concurrent.CountDownLatch;

/**
 * 同步器 CountDownLatch：做减法
 *    通过一个计数器来实现，计数器的初始值是线程的数量，每当一个线程执行完毕后，计数器就减-1，当计数器值为0时候，表示所有的线程执行完毕。
 *    await():调用await()方法的线程会被挂起，它会等待知道count=0时候才继续执行。
 *    await(long timeout,TimeUnit unit)等待一段时间后，如果count值还没有变为0就会继续执行，不等待了。
 *    countDown():将count值减一。
 */
public class CountDownLatch_Study {

    public static void main(String[] args) throws InterruptedException {


        CountDownLatch  countDownLatch=new CountDownLatch(6);//和线程数量一样


        for (int i = 0; i < 6; i++) {

            int key = i;
            new Thread(()->{
                System.out.println("同学"+key+"已经离开教师");
                countDownLatch.countDown();
            },"key").start();


        }

        countDownLatch.await();

        System.out.println("同学都离开了");
    }
}
